/**
 * 下载工厂 - 统一管理各种类型的下载处理器
 */

import GameDownloadHandler from './GameDownloadHandler.js'
import MovieDownloadHandler from './MovieDownloadHandler.js'
import NovelDownloadHandler from './NovelDownloadHandler.js'
import MusicDownloadHandler from './MusicDownloadHandler.js'
import DownloadCore from './DownloadCore.js'

class DownloadFactory {
  
  // 注册所有的下载处理器
  static handlers = {
    'game': GameDownloadHandler,
    'movie': MovieDownloadHandler,
    'novel': NovelDownloadHandler,
    'music': MusicDownloadHandler
  }
  
  /**
   * 获取指定类型的下载处理器
   * @param {string} type 下载类型
   * @returns {Object} 下载处理器
   */
  static getHandler(type) {
    const handler = this.handlers[type.toLowerCase()]
    if (!handler) {
      throw new Error(`不支持的下载类型: ${type}`)
    }
    return handler
  }
  
  /**
   * 处理下载 - 根据类型自动选择处理器
   * @param {string} type 下载类型
   * @param {Object} item 下载项
   * @param {Object} options 下载选项
   */
  static handleDownload(type, item, options = {}) {
    try {
      const handler = this.getHandler(type)
      return handler.handleDownload(item, options)
    } catch (error) {
      console.error('下载处理失败:', error)
      uni.showToast({
        title: error.message || '下载失败',
        icon: 'error'
      })
    }
  }
  
  /**
   * 注册新的下载处理器
   * @param {string} type 下载类型
   * @param {Object} handler 下载处理器类
   */
  static registerHandler(type, handler) {
    this.handlers[type.toLowerCase()] = handler
    console.log(`已注册下载处理器: ${type}`)
  }
  
  /**
   * 获取所有支持的下载类型
   * @returns {Array} 支持的类型列表
   */
  static getSupportedTypes() {
    return Object.keys(this.handlers)
  }
  
  /**
   * 检查是否支持指定类型
   * @param {string} type 下载类型
   * @returns {boolean} 是否支持
   */
  static isTypeSupported(type) {
    return this.handlers.hasOwnProperty(type.toLowerCase())
  }
  
  // ========== 断点续传相关方法（统一接口） ==========
  
  /**
   * 继续下载
   * @param {string} itemName 项目名称
   * @param {string} itemType 项目类型
   */
  static resumeDownload(itemName, itemType) {
    return DownloadCore.resumeDownload(itemName, itemType)
  }
  
  /**
   * 获取可恢复的下载信息
   * @param {string} itemName 项目名称
   * @param {string} itemType 项目类型
   */
  static getResumableDownload(itemName, itemType) {
    return DownloadCore.getResumableDownload(itemName, itemType)
  }
  
  /**
   * 清除可恢复的下载信息
   * @param {string} itemName 项目名称
   * @param {string} itemType 项目类型
   */
  static clearResumableDownload(itemName, itemType) {
    return DownloadCore.clearResumableDownload(itemName, itemType)
  }
  
  /**
   * 获取所有可恢复的下载
   */
  static getAllResumableDownloads() {
    return DownloadCore.getAllResumableDownloads()
  }
  
  /**
   * 清空所有断点续传信息
   */
  static clearAllResumableDownloads() {
    return DownloadCore.clearAllResumableDownloads()
  }
  
  // ========== 通用工具方法 ==========
  
  /**
   * 导航到下载页面
   */
  static navigateToDownloadPage() {
    // 使用基础处理器的导航方法
    GameDownloadHandler.navigateToDownloadPage()
  }
  
  /**
   * 复制到剪贴板
   * @param {string} text 要复制的文本
   * @param {string} message 成功提示信息
   */
  static copyToClipboard(text, message) {
    GameDownloadHandler.copyToClipboard(text, message)
  }
  
  /**
   * 格式化文件大小
   * @param {number} bytes 字节数
   * @returns {string} 格式化后的大小
   */
  static formatFileSize(bytes) {
    return DownloadCore.formatFileSize(bytes)
  }
}

export default DownloadFactory